#ifndef __HIKARI_CONTEXT__
#define __HIKARI_CONTEXT__

#include "hikari.h"

class ScriptManager;
class HObj;

class HikariContext{
private:
	IrrlichtDevice*device;
	video::IVideoDriver*driver;
	scene::ISceneManager*sceneManager;
	gui::IGUIEnvironment*guiManager;
	HikariEventReceiver*input;
	AnimationManager*animationManager;
	ScriptManager*scriptManager;
	std::list<HObj*>updateableObjects;
	u32 currentTime;
	f32 deltaTime;
public:
	HikariContext(IrrlichtDevice*device,HikariEventReceiver*input);

	std::wstring getMediaFolder(){
		return std::wstring(L"media/");
	}

	f32 getDeltaTime(){
		return deltaTime;
	}

	void setDeltaTime(const f32 deltaTime){
		this->deltaTime=deltaTime;
	}

	u32 getCurrentTime(){
		return currentTime;
	}

	void setCurrentTime(u32 time){
		currentTime=time;
	}

	std::list<HObj*>& getListOfUpdateableObjects(){
		return updateableObjects;
	}

	void addUpdateableObject(HObj*object){
		updateableObjects.push_back(object);
	}

	void removeUpdateableObject(HObj*object);

	bool isUpdateableObjectExist(HObj*object);

	IrrlichtDevice*getDevice(){
		return device;
	}

	video::IVideoDriver* getDriver(){
		return driver;
	}

	scene::ISceneManager*getSceneManager(){
		return sceneManager;
	}

	ScriptManager* getScriptManager(){
		return scriptManager;
	}

	AnimationManager*getAnimationManager(){
		return animationManager;
	}

	gui::IGUIEnvironment*getGuiManager(){
		return guiManager;
	}

	HikariEventReceiver*getInput(){
		return input;
	}
};
#endif